cmake_minimum_required(VERSION 3.0.0)
project(testselinux VERSION 0.1.0)


include_directories(include/ ./)


set(selinux_sources
  src/selinux/avc.c
  src/selinux/avc_internal.c
  src/selinux/avc_sidtab.c
  src/selinux/booleans.c
  src/selinux/callbacks.c
  src/selinux/canonicalize_context.c
  src/selinux/checkAccess.c
  src/selinux/check_context.c
  src/selinux/compute_av.c
  src/selinux/compute_create.c
  src/selinux/context.c
  src/selinux/deny_unknown.c
  src/selinux/disable.c
  src/selinux/enabled.c
  src/selinux/fgetfilecon.c
  src/selinux/freecon.c
  src/selinux/fsetfilecon.c
  src/selinux/get_initial_context.c
  src/selinux/getenforce.c
  src/selinux/getfilecon.c
  src/selinux/getpeercon.c
  src/selinux/init.c
  src/selinux/lgetfilecon.c
  src/selinux/load_policy.c
  src/selinux/lsetfilecon.c
  src/selinux/mapping.c
  src/selinux/policyvers.c
  src/selinux/procattr.c
  src/selinux/sestatus.c
  src/selinux/setenforce.c
  src/selinux/setfilecon.c
  src/selinux/stringrep.c
  src/selinux/xattr.c
)

add_library(selinux STATIC ${selinux_sources})

set(sepol_modern_sources
  src/sepol-modern/assertion.c
  src/sepol-modern/avrule_block.c
  src/sepol-modern/avtab.c
  src/sepol-modern/boolean_record.c
  src/sepol-modern/booleans.c
  src/sepol-modern/conditional.c
  src/sepol-modern/constraint.c
  src/sepol-modern/context.c
  src/sepol-modern/context_record.c
  src/sepol-modern/debug.c
  src/sepol-modern/ebitmap.c
  src/sepol-modern/expand.c
  src/sepol-modern/handle.c
  src/sepol-modern/hashtab.c
  src/sepol-modern/hierarchy.c
  src/sepol-modern/iface_record.c
  src/sepol-modern/interfaces.c
  src/sepol-modern/link.c
  src/sepol-modern/mls.c
  src/sepol-modern/module.c
  src/sepol-modern/module_to_cil.c
  src/sepol-modern/node_record.c
  src/sepol-modern/nodes.c
  src/sepol-modern/polcaps.c
  src/sepol-modern/policydb.c
  src/sepol-modern/policydb_convert.c
  src/sepol-modern/policydb_public.c
  src/sepol-modern/port_record.c
  src/sepol-modern/ports.c
  src/sepol-modern/roles.c
  src/sepol-modern/services.c
  src/sepol-modern/sidtab.c
  src/sepol-modern/symtab.c
  src/sepol-modern/user_record.c
  src/sepol-modern/users.c
  src/sepol-modern/util.c
  src/sepol-modern/write.c
)
add_library(sepol_modern STATIC ${sepol_modern_sources})
target_include_directories(sepol_modern PRIVATE src/sepol-modern src/sepol-modern/include src/sepol-modern)


set(sepol_legacy_sources
  src/sepol-legacy/assertion.c
  src/sepol-legacy/avrule_block.c
  src/sepol-legacy/avtab.c
  src/sepol-legacy/boolean_record.c
  src/sepol-legacy/booleans.c
  src/sepol-legacy/conditional.c
  src/sepol-legacy/constraint.c
  src/sepol-legacy/context.c
  src/sepol-legacy/context_record.c
  src/sepol-legacy/debug.c
  src/sepol-legacy/ebitmap.c
  src/sepol-legacy/expand.c
  src/sepol-legacy/handle.c
  src/sepol-legacy/hashtab.c
  src/sepol-legacy/hierarchy.c
  src/sepol-legacy/iface_record.c
  src/sepol-legacy/interfaces.c
  src/sepol-legacy/link.c
  src/sepol-legacy/mls.c
  src/sepol-legacy/module.c
  src/sepol-legacy/module_to_cil.c
  src/sepol-legacy/node_record.c
  src/sepol-legacy/nodes.c
  src/sepol-legacy/polcaps.c
  src/sepol-legacy/policydb.c
  src/sepol-legacy/policydb_convert.c
  src/sepol-legacy/policydb_public.c
  src/sepol-legacy/port_record.c
  src/sepol-legacy/ports.c
  src/sepol-legacy/roles.c
  src/sepol-legacy/services.c
  src/sepol-legacy/sidtab.c
  src/sepol-legacy/symtab.c
  src/sepol-legacy/user_record.c
  src/sepol-legacy/users.c
  src/sepol-legacy/util.c
  src/sepol-legacy/write.c
)
add_library(sepol_legacy STATIC ${sepol_legacy_sources})
target_include_directories(sepol_legacy PRIVATE src/sepol-legacy/include src/sepol-legacy)
target_compile_options(sepol_legacy PRIVATE -include sepol-legacy-renames.h)

add_library(frida_selinux_modern STATIC src/patch.c)
target_compile_options(frida_selinux_modern PRIVATE -DFRIDA_SELINUX_MODERN)
target_include_directories(frida_selinux_modern PRIVATE src/sepol-modern/include )


add_library(frida_selinux_legacy STATIC src/patch.c)
target_include_directories(frida_selinux_legacy PRIVATE src/sepol-legacy/include)
target_compile_options(frida_selinux_legacy PRIVATE -DFRIDA_SELINUX_LEGACY -include sepol-legacy-renames.h)



set(frida_selinux_sources
  src/dispatch.c
)

add_library(frida_selinux STATIC ${frida_selinux_sources})


add_library(fakeglib glib.c carray.c)

##################
if(BUILD_TEST)
add_executable(testselinux main.c)
target_link_libraries(testselinux
  frida_selinux
  frida_selinux_modern
  frida_selinux_legacy
  sepol_legacy
  sepol_modern
  selinux
  fakeglib)
endif()